The European freshwater landscape and hotspot areas of mass effects and regional connectivity

Diversity and distributions - DOI: https://doi.org/10.1111/ddi.13711

David Cunillera-Montcusí, Jordi Bou, Thomas Mehner, Sandra Brucet, Matías Arim and Ana I. Borthagaray

Submitted - 31/10/2022

Script introduction

Find in the following lines the code corresponding to the analysis of the article: The European freshwater landscape and hotspot areas of mass effects and regional connectivity.

All the suplementary material images, original scripts and used functions can be found in:

Article DOI: https://doi.org/10.1111/ddi.13711

Direct link to repositpory: https://github.com/Metacommunity-Lab/DD_PanEU_Waterscape

To properly follow the following steps we recommend to read the entire work to better contextualize the use and limitations of the current codes and functions.

The scripts can be found in the following repository

Link to the function: https://github.com/Metacommunity-Lab/DD_PanEU_Waterscape

Link to supplementary material: https://doi.org/10.1111/ddi.13711

The following lines of script correspond to the results obtained and the maps generation of the following paper: Cunillera-Montcusí, D., J. Bou, T. Mehner, S. Brucet, M. Arim, & A. I. Borthagaray, 2023. The European freshwater landscape and hotspot areas of mass effects and regional connectivity. Diversity and Distributions 29: 997–1008.

The current database includes all the generated observaitons of different centrality metrics corresponding to 3 main centrality metrics distributed in cells fo 10x10 km throghout the entire European continent. Once the weighted graph was defined, three centrality metrics were estimated for each cell (node).

The metric ‘out-degree’ that reflects the potential of a node (local communities) to operate as a source community is the sum of link weights along all the links that start on the reference cell.

The metric ‘in-degree’, which reflects the importance of incoming dispersal from other communities for local diversity, is estimated as the sum of all links arriving at the reference cell.

Additionally, local communities’ importance for connecting other communities (corridor effects) is captured by the graph centrality metric ‘betweenness’. This metric indicates the number of pairs of other communities that pass through this community in the shortest path that connects them.

In-degree, out-degree and betweenness were estimated for each of the 134,244 spatial cells of Europe. All the analyses were performed for all freshwaters combined and for ephemeral, temporal and permanent freshwaters independently, considering the different freshwater ecoregions.

Find below an example of calculation of different centrality metrics for 1 specific ecoregion.

## Waterscape of "Unassigned" (EcoR_ID 0)
load("Waterscape_Europa_EcoR.RData")

##########
head(M.Europa.J) ## Matrix to be used
M.Europa.J[which(M.Europa.J$PageName=="AA287"),1:16]
#################################################
##### Diviging for each Ecoregion
unique(M.Europa.J$EcoR_Name)
unique(M.Europa.J$EcoR_Name)[37]

A<-M.Europa.J[which(M.Europa.J$EcoR_Name== "Unassigned"),]
dim(A)
head(A)
M.Europa.J[which(M.Europa.J$EcoR_ID==0)[1],10]

########################################################################
library(geosphere); library(sp); library(stars)  
coord.xy<-cbind(A$CENTROID_X,A$CENTROID_Y)
colnames(coord.xy)<-c("CENTROID_X "," CENTROID_Y")
FreshW_coord <- st_as_sf(as.data.frame(coord.xy),coords = c("CENTROID_X "," CENTROID_Y")) # Transforming to sf format
FreshW_coord_spatial <- as(FreshW_coord, "Spatial") # Convert to "old" format to caluclate to distances
#### Calculate the distance matrix (in METRES!!!) from a lat/long values 
aa_en_metros<- distm(FreshW_coord_spatial@coords,FreshW_coord_spatial@coords, fun = distGeo) 

### plot
par(mar=c(2.5,2.5,1.5,1.5),bty="l",cex=1.8)
plot(M.Europa.J$CENTROID_Y~M.Europa.J$CENTROID_X,cex=0.1,col="light gray",pch=15)
points(A$CENTROID_Y~A$CENTROID_X,cex=0.1,col="orange",pch=15)

# D50.4 - D50 (distance at which dispersal prob. is 0.5) is 4 KM
rm(D50)
D50<-4
b.mig=(-log(.5)/(D50))
par(mar=c(4,4,.5,.5),cex=1.4,bty="l")
plot(exp(-b.mig*(0:200))~I(0:200),ylim=c(0,1),type="l",lwd=4,col="dark green",ylab="Dispersal probability",xlab="Distance (Km)")
abline(h=0.5)
exp(-b.mig*4)
b.mig_D50.4<-b.mig
rm(b.mig)

# Separating for the different types of freshwater habitats
dim(aa_en_metros)
exp(-b.mig_D50.4*(aa_en_metros/1000))*A$J.efimero->mm.efimero.D50.4 ## 1
exp(-b.mig_D50.4*(aa_en_metros/1000))*A$J.temporal->mm.temporal.D50.4 ## 2
exp(-b.mig_D50.4*(aa_en_metros/1000))*A$J.permanente->mm.permanente.D50.4 ## 3
exp(-b.mig_D50.4*(aa_en_metros/1000))*A$J.freshwater->mm.fw.D50.4 ## 

id.fw<-which(A$FRESHWATER!=0); length(id.fw)### 169 are freshwater
id.efimero<-which(A$FRESHWATER.efimeros!=0); length(id.efimero)### 154 fw ephemeral
id.temporal<-which(A$FRESHWATER.temporales!=0); length(id.temporal)### 161 temporary
id.permanentes<-which(A$FRESHWATER.permanentes!=0); length(id.permanentes) ### 142 fw permanent

# Degree calculation
detach("package:igraph", unload = TRUE)
library("sna") 
# For degree we consider the weight of each node as its own habitat size 
# Ephemeral
degree(mm.efimero.D50.4[id.efimero,id.efimero],gmode="digraph",cmode="indegree")->grado.in.efimero.D50.4 
degree(mm.efimero.D50.4[id.efimero,id.efimero],gmode="digraph",cmode="outdegree")->grado.out.efimero.D50.4
colnames(A)
# Temporal 
degree(mm.temporal.D50.4[id.temporal,id.temporal],gmode="digraph",cmode="indegree")->grado.in.temporal.D50.4
degree(mm.temporal.D50.4[id.temporal,id.temporal],gmode="digraph",cmode="outdegree")->grado.out.temporal.D50.4
# Permanent
degree(mm.permanente.D50.4[id.permanentes,id.permanentes],gmode="digraph",cmode="indegree")->grado.in.permanente.D50.4
degree(mm.permanente.D50.4[id.permanentes,id.permanentes],gmode="digraph",cmode="outdegree")->grado.out.permanente.D50.4
# All freshwaters
degree(mm.fw.D50.4[id.fw,id.fw],gmode="digraph",cmode="indegree")->grado.in.fw.D50.4
degree(mm.fw.D50.4[id.fw,id.fw],gmode="digraph",cmode="outdegree")->grado.out.fw.D50.4

# Betweenness calculation
detach("package:sna", unload = TRUE)
library(igraph) 
# For betweenness we estimate the igraph and consider the weights as the distances among sites (1/dist) 
graph.adjacency(1/(mm.efimero.D50.4[id.efimero,id.efimero]),mode="directed",weighted = TRUE)->g0.efimero.D50.4
graph.adjacency(1/(mm.temporal.D50.4[id.temporal,id.temporal]),mode="directed",weighted = TRUE)->g0.temporal.D50.4
graph.adjacency(1/(mm.permanente.D50.4[id.permanentes,id.permanentes]),mode="directed",weighted = TRUE)->g0.permanente.D50.4
graph.adjacency(1/(mm.fw.D50.4[id.fw,id.fw]),mode="directed",weighted = TRUE)->g0.fw.D50.4

##  weighted betweenness centrality per freshwater
# Ephemeral
betweenness(g0.efimero.D50.4,directed = TRUE)->bc.efimero.D50.4 
# Temporal 
betweenness(g0.temporal.D50.4,directed = TRUE)->bc.temporal.D50.4
# Permanent
betweenness(g0.permanente.D50.4,directed = TRUE)->bc.permanente.D50.4
# All 
betweenness(g0.fw.D50.4,directed = TRUE)->bc.fw.D50.4

After carrying these analysis for all ecoregion we obtained the CentralityResults.RData where all the centrality metrics have been calculated for each ecoregino. The following lines contain some examples of code to plot the current results and the final figures obtained in the paper.

Also, find in the scripts Centrlaity_calculatino and LogRatio_calculation the specific lines for calculating LogRatio results that conformed Figure 4 of these papers.

##### ##### ##### #####  Loading data ##### ##### ##### ##### 
load("CentralityResults.RData")
# Complete matrix with all the values for each freshwater type: EF(1).T(2).P(3) and Land (0)
M.final.UK # Values obtained for the Ecoregion corresponding to the UK

# Different countries/ecoregions can be obtained
unique(M.final.UK$ISO3_CODE);dim(M.final.UK)
unique(M.final.SWE$ISO3_CODE); dim(M.final.SWE)
unique(M.final.FIN$ISO3_CODE)
unique(M.final_FRA.LUX.BEL.NLD$ISO3_CODE)
unique(M.final.NOR$ISO3_CODE)
unique(M.final.FW.UK$ISO3_CODE)
unique(M.final.FW.SWE$ISO3_CODE)
unique(M.final.FW.ESP.PRT$ISO3_CODE)
unique(M.final.FW.FIN$ISO3_CODE)
unique(M.final.FW_FRA.LUX.BEL.NLD$ISO3_CODE)
unique(M.final.FW.NOR$ISO3_CODE)

All freshwaters

InDegree

“SINK-MASS EFECT (in-degree; 4Km)”

It reflects the importance of incoming dispersal from other communities for local diversity, is estimated as the sum of all links arriving at the reference cell.

par(mar=c(2.5,2.5,1.5,1.5),bty="l",cex=1.6)
par(mfrow=c(1,1),oma = c(0, 0, 4, 0))
#  All freshwaters: EF(1).T(2).P(3) == 0 ____ ####
plot(M.Europa.J$CENTROID_Y~M.Europa.J$CENTROID_X,cex=0.1,col="light gray",pch=15, main="All-freshwater (4Km)")
points(M.Europa.J$CENTROID_Y[which(M.Europa.J$ISO3_CODE=="")]~M.Europa.J$CENTROID_X[which(M.Europa.J$ISO3_CODE=="")],cex=0.1,col="black",pch=15)
## UK
M.final.FW.UK->B
ii <- cut(B$grado.in.D50.4, 
          breaks = seq(min(B$grado.in.D50.4), 
                       max(B$grado.in.D50.4), len = 600), include.lowest = TRUE)
points(B$CENTROID_Y~B$CENTROID_X,cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,B)
## SWE
M.final.FW.SWE->B
ii <- cut(B$grado.in.D50.4, 
          breaks = seq(min(B$grado.in.D50.4), 
                       max(B$grado.in.D50.4), len = 600), include.lowest = TRUE)
points(B$CENTROID_Y~B$CENTROID_X,cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,B)
## ESP.PRT
M.final.ESP.PRT->B
ii <- cut(B$grado.in.D50.4, 
          breaks = seq(min(B$grado.in.D50.4), 
                       max(B$grado.in.D50.4), len = 600), include.lowest = TRUE)
points(B$CENTROID_Y~B$CENTROID_X,cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,B)
## NOR
M.final.FW.NOR->B
ii <- cut(B$grado.in.D50.4, 
          breaks = seq(min(B$grado.in.D50.4), 
                       max(B$grado.in.D50.4), len = 600), include.lowest = TRUE)
points(B$CENTROID_Y~B$CENTROID_X,cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,B)
## FRA.LUX.BEL.NLD
M.final_FRA.LUX.BEL.NLD->B
ii <- cut(B$grado.in.D50.4, 
          breaks = seq(min(B$grado.in.D50.4), 
                       max(B$grado.in.D50.4), len = 600), include.lowest = TRUE)
points(B$CENTROID_Y~B$CENTROID_X,cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,B)
## FIN
M.final.FW.FIN->B
ii <- cut(B$grado.in.D50.4, 
          breaks = seq(min(B$grado.in.D50.4), 
                       max(B$grado.in.D50.4), len = 600), include.lowest = TRUE)
points(B$CENTROID_Y~B$CENTROID_X,cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,B)

OutDegree

“SOURCE EFECT (in-degree; 4Km)”

It reflects the potential of a node (local communities) to operate as a source community is the sum of link weights along all the links that start on the reference cell.

par(mar=c(2.5,2.5,1.5,1.5),bty="l",cex=1.6)
par(mfrow=c(1,1),oma = c(0, 0, 4, 0))

#  All freshwaters: EF(1).T(2).P(3) == 0 ____ ####
plot(M.Europa.J$CENTROID_Y~M.Europa.J$CENTROID_X,cex=0.1,col="light gray",pch=15, main="All-freshwater (4Km)")
points(M.Europa.J$CENTROID_Y[which(M.Europa.J$ISO3_CODE=="")]~M.Europa.J$CENTROID_X[which(M.Europa.J$ISO3_CODE=="")],cex=0.1,col="black",pch=15)
## UK
M.final.FW.UK->B
ii <- cut(B$grado.in.D50.4, 
          breaks = seq(min(B$grado.out.D50.4), 
                       max(B$grado.out.D50.4), len = 600), include.lowest = TRUE)
points(B$CENTROID_Y~B$CENTROID_X,cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,B)
## SWE
M.final.FW.SWE->B
ii <- cut(B$grado.in.D50.4, 
          breaks = seq(min(B$grado.out.D50.4), 
                       max(B$grado.out.D50.4), len = 600), include.lowest = TRUE)
points(B$CENTROID_Y~B$CENTROID_X,cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,B)
## ESP.PRT
M.final.ESP.PRT->B
ii <- cut(B$grado.in.D50.4, 
          breaks = seq(min(B$grado.out.D50.4), 
                       max(B$grado.out.D50.4), len = 600), include.lowest = TRUE)
points(B$CENTROID_Y~B$CENTROID_X,cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,B)

## FIN
M.final.FIN->B
ii <- cut(B$grado.in.D50.4, 
          breaks = seq(min(B$grado.out.D50.4), 
                       max(B$grado.out.D50.4), len = 600), include.lowest = TRUE)
points(B$CENTROID_Y~B$CENTROID_X,cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,B)
## FRA.LUX.BEL.NLD
M.final_FRA.LUX.BEL.NLD->B
ii <- cut(B$grado.in.D50.4, 
          breaks = seq(min(B$grado.out.D50.4), 
                       max(B$grado.out.D50.4), len = 600), include.lowest = TRUE)
points(B$CENTROID_Y~B$CENTROID_X,cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,B)
## NOR
M.final.NOR->B
ii <- cut(B$grado.in.D50.4, 
          breaks = seq(min(B$grado.out.D50.4), 
                       max(B$grado.out.D50.4), len = 600), include.lowest = TRUE)
points(B$CENTROID_Y~B$CENTROID_X,cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,B)

Betweenness

“STEPPING STONE (BC-4Km)”

Communities importance for connecting other communities (corridor effects) is captured by the graph centrality metric ‘betweenness’. This metric indicates the number of pairs of other communities that pass through this community in the shortest path that connects them.

par(mar=c(2.5,2.5,1.5,1.5),bty="l",cex=1.6)
par(mfrow=c(1,1),oma = c(0, 0, 4, 0))

#  All freshwaters: EF(1).T(2).P(3) == 0 ____ ####
plot(M.Europa.J$CENTROID_Y~M.Europa.J$CENTROID_X,cex=0.1,col="light gray",pch=15, main="All-freshwater (4Km)")
points(M.Europa.J$CENTROID_Y[which(M.Europa.J$ISO3_CODE=="")]~M.Europa.J$CENTROID_X[which(M.Europa.J$ISO3_CODE=="")],cex=0.1,col="black",pch=15)
## UK
M.final.FW.UK->B
ii <- cut(B$bc.D50.4, 
          breaks = seq(min(B$bc.D50.4), 
                       max(B$bc.D50.4), len = 600), include.lowest = TRUE)
points(B$CENTROID_Y~B$CENTROID_X,cex=0.4,col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,B)
## SWE
M.final.FW.SWE->B
ii <- cut(B$bc.D50.4, 
          breaks = seq(min(B$bc.D50.4), 
                       max(B$bc.D50.4), len = 600), include.lowest = TRUE)
points(B$CENTROID_Y~B$CENTROID_X,cex=0.4,col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,B)
## ESP.PRT
M.final.ESP.PRT->B
ii <- cut(B$bc.D50.4, 
          breaks = seq(min(B$bc.D50.4), 
                       max(B$bc.D50.4), len = 600), include.lowest = TRUE)

points(B$CENTROID_Y~B$CENTROID_X,cex=0.4, col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,B)
## NOR
M.final.NOR->B
ii <- cut(B$bc.D50.4, 
          breaks = seq(min(B$bc.D50.4), 
                       max(B$bc.D50.4), len = 600), include.lowest = TRUE)

points(B$CENTROID_Y~B$CENTROID_X,cex=0.4, col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,B)
##FRA.LUX.BEL.NLD 
M.final_FRA.LUX.BEL.NLD->B
ii <- cut(B$bc.D50.4, 
          breaks = seq(min(B$bc.D50.4), 
                       max(B$bc.D50.4), len = 600), include.lowest = TRUE)

points(B$CENTROID_Y~B$CENTROID_X,cex=0.4, col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,B)
##FIN
M.final.FIN->B
ii <- cut(B$bc.D50.4, 
          breaks = seq(min(B$bc.D50.4), 
                       max(B$bc.D50.4), len = 600), include.lowest = TRUE)

points(B$CENTROID_Y~B$CENTROID_X,cex=0.4, col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,B)

Eph., Temp. and Perm.

InDegree

“SINK-MASS EFECT (in-degree; 4Km)”

It reflects the importance of incoming dispersal from other communities for local diversity, is estimated as the sum of all links arriving at the reference cell.

par(mar=c(2.5,2.5,1.5,1.5),bty="l",cex=1.6)
par(mfrow=c(1,1),oma = c(0, 0, 4, 0))

#  Ephenmeral freshwaters: EF(1).T(2).P(3) == 1 ____ ####
plot(M.Europa.J$CENTROID_Y~M.Europa.J$CENTROID_X,cex=0.1,col="light gray",pch=15, main="Ephemeral (4Km)")
points(M.Europa.J$CENTROID_Y[which(M.Europa.J$ISO3_CODE=="")]~M.Europa.J$CENTROID_X[which(M.Europa.J$ISO3_CODE=="")],cex=0.1,col="dark gray",pch=15)
mtext("Mass effect \n (in-degree)", outer = TRUE, cex = 1.5,padj = 0,col="black")
## UK
M.final.UK->A
ii <- cut(A$grado.in.D50.4[which(A$`EF(1).T(2).P(3)`==1)], 
          breaks = seq(min(A$grado.in.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), 
                       max(A$grado.in.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), len = 600), include.lowest = TRUE)
points(A$CENTROID_Y[which(A$`EF(1).T(2).P(3)`==1)]~A$CENTROID_X[which(A$`EF(1).T(2).P(3)`==1)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,A)
###SWE
M.final.SWE->A
ii <- cut(A$grado.in.D50.4[which(A$`EF(1).T(2).P(3)`==1)], 
          breaks = seq(min(A$grado.in.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), 
                       max(A$grado.in.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), len = 600), include.lowest = TRUE)
points(A$CENTROID_Y[which(A$`EF(1).T(2).P(3)`==1)]~A$CENTROID_X[which(A$`EF(1).T(2).P(3)`==1)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,A)
###ESP.PRT
M.final.ESP.PRT->A
ii <- cut(A$grado.in.D50.4[which(A$`EF(1).T(2).P(3)`==1)], 
          breaks = seq(min(A$grado.in.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), 
                       max(A$grado.in.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), len = 600), include.lowest = TRUE)
points(A$CENTROID_Y[which(A$`EF(1).T(2).P(3)`==1)]~A$CENTROID_X[which(A$`EF(1).T(2).P(3)`==1)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,A)

M.final.FIN->A
ii <- cut(A$grado.in.D50.4[which(A$`EF(1).T(2).P(3)`==1)], 
          breaks = seq(min(A$grado.in.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), 
                       max(A$grado.in.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), len = 600), include.lowest = TRUE)
points(A$CENTROID_Y[which(A$`EF(1).T(2).P(3)`==1)]~A$CENTROID_X[which(A$`EF(1).T(2).P(3)`==1)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,A)

M.final_FRA.LUX.BEL.NLD->A
ii <- cut(A$grado.in.D50.4[which(A$`EF(1).T(2).P(3)`==1)], 
          breaks = seq(min(A$grado.in.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), 
                       max(A$grado.in.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), len = 600), include.lowest = TRUE)
points(A$CENTROID_Y[which(A$`EF(1).T(2).P(3)`==1)]~A$CENTROID_X[which(A$`EF(1).T(2).P(3)`==1)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,A)

M.final.NOR->A
ii <- cut(A$grado.in.D50.4[which(A$`EF(1).T(2).P(3)`==1)], 
          breaks = seq(min(A$grado.in.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), 
                       max(A$grado.in.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), len = 600), include.lowest = TRUE)
points(A$CENTROID_Y[which(A$`EF(1).T(2).P(3)`==1)]~A$CENTROID_X[which(A$`EF(1).T(2).P(3)`==1)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,A)

par(mar=c(2.5,2.5,1.5,1.5),bty="l",cex=1.6)
par(mfrow=c(1,1),oma = c(0, 0, 4, 0))
#  Temporal freshwaters: EF(1).T(2).P(3) == 2 ____ ####
plot(M.Europa.J$CENTROID_Y~M.Europa.J$CENTROID_X,cex=0.1,col="light gray",pch=15, main="Temporal (4Km)")
points(M.Europa.J$CENTROID_Y[which(M.Europa.J$ISO3_CODE=="")]~M.Europa.J$CENTROID_X[which(M.Europa.J$ISO3_CODE=="")],cex=0.1,col="black",pch=15)
## UK
M.final.UK->AA
ii <- cut(AA$grado.in.D50.4[which(AA$`EF(1).T(2).P(3)`==2)], 
          breaks = seq(min(AA$grado.in.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), 
                       max(AA$grado.in.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), len = 600), include.lowest = TRUE)
points(AA$CENTROID_Y[which(AA$`EF(1).T(2).P(3)`==2)]~AA$CENTROID_X[which(AA$`EF(1).T(2).P(3)`==2)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AA)
## SWE
M.final.SWE->AA
ii <- cut(AA$grado.in.D50.4[which(AA$`EF(1).T(2).P(3)`==2)], 
          breaks = seq(min(AA$grado.in.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), 
                       max(AA$grado.in.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), len = 600), include.lowest = TRUE)
points(AA$CENTROID_Y[which(AA$`EF(1).T(2).P(3)`==2)]~AA$CENTROID_X[which(AA$`EF(1).T(2).P(3)`==2)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AA)
## ESP.PRT
M.final.ESP.PRT->AA
ii <- cut(AA$grado.in.D50.4[which(AA$`EF(1).T(2).P(3)`==2)], 
          breaks = seq(min(AA$grado.in.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), 
                       max(AA$grado.in.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), len = 600), include.lowest = TRUE)
points(AA$CENTROID_Y[which(AA$`EF(1).T(2).P(3)`==2)]~AA$CENTROID_X[which(AA$`EF(1).T(2).P(3)`==2)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AA)

## FIN
M.final.FIN->AA
ii <- cut(AA$grado.in.D50.4[which(AA$`EF(1).T(2).P(3)`==2)], 
          breaks = seq(min(AA$grado.in.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), 
                       max(AA$grado.in.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), len = 600), include.lowest = TRUE)
points(AA$CENTROID_Y[which(AA$`EF(1).T(2).P(3)`==2)]~AA$CENTROID_X[which(AA$`EF(1).T(2).P(3)`==2)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AA)

## FRA.LUX.BEL.NLD
M.final_FRA.LUX.BEL.NLD->AA
ii <- cut(AA$grado.in.D50.4[which(AA$`EF(1).T(2).P(3)`==2)], 
          breaks = seq(min(AA$grado.in.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), 
                       max(AA$grado.in.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), len = 600), include.lowest = TRUE)
points(AA$CENTROID_Y[which(AA$`EF(1).T(2).P(3)`==2)]~AA$CENTROID_X[which(AA$`EF(1).T(2).P(3)`==2)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AA)

## NOR
M.final.NOR->AA
ii <- cut(AA$grado.in.D50.4[which(AA$`EF(1).T(2).P(3)`==2)], 
          breaks = seq(min(AA$grado.in.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), 
                       max(AA$grado.in.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), len = 600), include.lowest = TRUE)
points(AA$CENTROID_Y[which(AA$`EF(1).T(2).P(3)`==2)]~AA$CENTROID_X[which(AA$`EF(1).T(2).P(3)`==2)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AA)

par(mar=c(2.5,2.5,1.5,1.5),bty="l",cex=1.6)
par(mfrow=c(1,1),oma = c(0, 0, 4, 0))
#  Permanent freshwaters: EF(1).T(2).P(3) == 3 ____ ####
plot(M.Europa.J$CENTROID_Y~M.Europa.J$CENTROID_X,cex=0.1,col="light gray",pch=15, main="Permanent (4Km)")
points(M.Europa.J$CENTROID_Y[which(M.Europa.J$ISO3_CODE=="")]~M.Europa.J$CENTROID_X[which(M.Europa.J$ISO3_CODE=="")],cex=0.1,col="black",pch=15)
## UK
M.final.UK->AAA
ii <- cut(AAA$grado.in.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)], 
          breaks = seq(min(AAA$grado.in.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), 
                       max(AAA$grado.in.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), len = 600), include.lowest = TRUE)
points(AAA$CENTROID_Y[which(AAA$`EF(1).T(2).P(3)`==3)]~AAA$CENTROID_X[which(AAA$`EF(1).T(2).P(3)`==3)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AAA)

## SWE
M.final.SWE->AAA
ii <- cut(AAA$grado.in.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)], 
          breaks = seq(min(AAA$grado.in.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), 
                       max(AAA$grado.in.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), len = 600), include.lowest = TRUE)
points(AAA$CENTROID_Y[which(AAA$`EF(1).T(2).P(3)`==3)]~AAA$CENTROID_X[which(AAA$`EF(1).T(2).P(3)`==3)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AAA)

## ESP.PRT
M.final.ESP.PRT->AAA
ii <- cut(AAA$grado.in.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)], 
          breaks = seq(min(AAA$grado.in.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), 
                       max(AAA$grado.in.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), len = 600), include.lowest = TRUE)
points(AAA$CENTROID_Y[which(AAA$`EF(1).T(2).P(3)`==3)]~AAA$CENTROID_X[which(AAA$`EF(1).T(2).P(3)`==3)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AAA)

## FIN
M.final.FIN->AAA
ii <- cut(AAA$grado.in.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)], 
          breaks = seq(min(AAA$grado.in.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), 
                       max(AAA$grado.in.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), len = 600), include.lowest = TRUE)
points(AAA$CENTROID_Y[which(AAA$`EF(1).T(2).P(3)`==3)]~AAA$CENTROID_X[which(AAA$`EF(1).T(2).P(3)`==3)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AAA)

## FRA.LUX.BEL.NLD
M.final_FRA.LUX.BEL.NLD->AAA
ii <- cut(AAA$grado.in.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)], 
          breaks = seq(min(AAA$grado.in.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), 
                       max(AAA$grado.in.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), len = 600), include.lowest = TRUE)
points(AAA$CENTROID_Y[which(AAA$`EF(1).T(2).P(3)`==3)]~AAA$CENTROID_X[which(AAA$`EF(1).T(2).P(3)`==3)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AAA)

## NOR
M.final.NOR->AAA
ii <- cut(AAA$grado.in.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)], 
          breaks = seq(min(AAA$grado.in.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), 
                       max(AAA$grado.in.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), len = 600), include.lowest = TRUE)
points(AAA$CENTROID_Y[which(AAA$`EF(1).T(2).P(3)`==3)]~AAA$CENTROID_X[which(AAA$`EF(1).T(2).P(3)`==3)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AAA)

OutDegree

“SOURCE EFECT (in-degree; 4Km)”

It reflects the potential of a node (local communities) to operate as a source community is the sum of link weights along all the links that start on the reference cell.

par(mar=c(2.5,2.5,1.5,1.5),bty="l",cex=1.6)
par(mfrow=c(1,1),oma = c(0, 0, 4, 0))
#  Ephemeral freshwaters: EF(1).T(2).P(3) == 1 ____ ####
plot(M.Europa.J$CENTROID_Y~M.Europa.J$CENTROID_X,cex=0.1,col="light gray",pch=15, main="Ephemeral (4Km)")
points(M.Europa.J$CENTROID_Y[which(M.Europa.J$ISO3_CODE=="")]~M.Europa.J$CENTROID_X[which(M.Europa.J$ISO3_CODE=="")],cex=0.1,col="dark gray",pch=15)
mtext("Source patches \n (out-degree)", outer = TRUE, cex = 1.5,padj = 0,col="black")

## UK
M.final.UK->A
ii <- cut(A$grado.out.D50.4[which(A$`EF(1).T(2).P(3)`==1)], 
          breaks = seq(min(A$grado.out.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), 
                       max(A$grado.out.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), len = 600), include.lowest = TRUE)
points(A$CENTROID_Y[which(A$`EF(1).T(2).P(3)`==1)]~A$CENTROID_X[which(A$`EF(1).T(2).P(3)`==1)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,A)
###SWE
M.final.SWE->A
ii <- cut(A$grado.out.D50.4[which(A$`EF(1).T(2).P(3)`==1)], 
          breaks = seq(min(A$grado.out.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), 
                       max(A$grado.out.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), len = 600), include.lowest = TRUE)
points(A$CENTROID_Y[which(A$`EF(1).T(2).P(3)`==1)]~A$CENTROID_X[which(A$`EF(1).T(2).P(3)`==1)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,A)
###ESP.PRT
M.final.ESP.PRT->A
ii <- cut(A$grado.out.D50.4[which(A$`EF(1).T(2).P(3)`==1)], 
          breaks = seq(min(A$grado.out.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), 
                       max(A$grado.out.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), len = 600), include.lowest = TRUE)
points(A$CENTROID_Y[which(A$`EF(1).T(2).P(3)`==1)]~A$CENTROID_X[which(A$`EF(1).T(2).P(3)`==1)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,A)
###FIN
M.final.FIN->A
ii <- cut(A$grado.out.D50.4[which(A$`EF(1).T(2).P(3)`==1)], 
          breaks = seq(min(A$grado.out.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), 
                       max(A$grado.out.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), len = 600), include.lowest = TRUE)
points(A$CENTROID_Y[which(A$`EF(1).T(2).P(3)`==1)]~A$CENTROID_X[which(A$`EF(1).T(2).P(3)`==1)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,A)

###FRA.LUX.BEL.NLD
M.final_FRA.LUX.BEL.NLD->A
ii <- cut(A$grado.out.D50.4[which(A$`EF(1).T(2).P(3)`==1)], 
          breaks = seq(min(A$grado.out.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), 
                       max(A$grado.out.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), len = 600), include.lowest = TRUE)
points(A$CENTROID_Y[which(A$`EF(1).T(2).P(3)`==1)]~A$CENTROID_X[which(A$`EF(1).T(2).P(3)`==1)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,A)

###NOR
M.final.NOR->A
ii <- cut(A$grado.out.D50.4[which(A$`EF(1).T(2).P(3)`==1)], 
          breaks = seq(min(A$grado.out.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), 
                       max(A$grado.out.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), len = 600), include.lowest = TRUE)
points(A$CENTROID_Y[which(A$`EF(1).T(2).P(3)`==1)]~A$CENTROID_X[which(A$`EF(1).T(2).P(3)`==1)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,A)

par(mar=c(2.5,2.5,1.5,1.5),bty="l",cex=1.6)
par(mfrow=c(1,1),oma = c(0, 0, 4, 0))

#  Temporal freshwaters: EF(1).T(2).P(3) == 2 ____ ####
plot(M.Europa.J$CENTROID_Y~M.Europa.J$CENTROID_X,cex=0.1,col="light gray",pch=15, main="Temporal (4Km)")
points(M.Europa.J$CENTROID_Y[which(M.Europa.J$ISO3_CODE=="")]~M.Europa.J$CENTROID_X[which(M.Europa.J$ISO3_CODE=="")],cex=0.1,col="black",pch=15)
## UK
M.final.UK->AA
ii <- cut(AA$grado.out.D50.4[which(AA$`EF(1).T(2).P(3)`==2)], 
          breaks = seq(min(AA$grado.out.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), 
                       max(AA$grado.out.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), len = 600), include.lowest = TRUE)
points(AA$CENTROID_Y[which(AA$`EF(1).T(2).P(3)`==2)]~AA$CENTROID_X[which(AA$`EF(1).T(2).P(3)`==2)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AA)
## SWE
M.final.SWE->AA
ii <- cut(AA$grado.out.D50.4[which(AA$`EF(1).T(2).P(3)`==2)], 
          breaks = seq(min(AA$grado.out.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), 
                       max(AA$grado.out.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), len = 600), include.lowest = TRUE)
points(AA$CENTROID_Y[which(AA$`EF(1).T(2).P(3)`==2)]~AA$CENTROID_X[which(AA$`EF(1).T(2).P(3)`==2)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AA)
## ESP.PRT
M.final.ESP.PRT->AA
ii <- cut(AA$grado.out.D50.4[which(AA$`EF(1).T(2).P(3)`==2)], 
          breaks = seq(min(AA$grado.out.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), 
                       max(AA$grado.out.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), len = 600), include.lowest = TRUE)
points(AA$CENTROID_Y[which(AA$`EF(1).T(2).P(3)`==2)]~AA$CENTROID_X[which(AA$`EF(1).T(2).P(3)`==2)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AA)
## FIN
M.final.FIN->AA
ii <- cut(AA$grado.out.D50.4[which(AA$`EF(1).T(2).P(3)`==2)], 
          breaks = seq(min(AA$grado.out.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), 
                       max(AA$grado.out.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), len = 600), include.lowest = TRUE)
points(AA$CENTROID_Y[which(AA$`EF(1).T(2).P(3)`==2)]~AA$CENTROID_X[which(AA$`EF(1).T(2).P(3)`==2)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AA)
## FRA.LUX.BEL.NLD
M.final_FRA.LUX.BEL.NLD->AA
ii <- cut(AA$grado.out.D50.4[which(AA$`EF(1).T(2).P(3)`==2)], 
          breaks = seq(min(AA$grado.out.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), 
                       max(AA$grado.out.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), len = 600), include.lowest = TRUE)
points(AA$CENTROID_Y[which(AA$`EF(1).T(2).P(3)`==2)]~AA$CENTROID_X[which(AA$`EF(1).T(2).P(3)`==2)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AA)
## NOR
M.final.NOR->AA
ii <- cut(AA$grado.out.D50.4[which(AA$`EF(1).T(2).P(3)`==2)], 
          breaks = seq(min(AA$grado.out.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), 
                       max(AA$grado.out.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), len = 600), include.lowest = TRUE)
points(AA$CENTROID_Y[which(AA$`EF(1).T(2).P(3)`==2)]~AA$CENTROID_X[which(AA$`EF(1).T(2).P(3)`==2)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AA)

par(mar=c(2.5,2.5,1.5,1.5),bty="l",cex=1.6)
par(mfrow=c(1,1),oma = c(0, 0, 4, 0))

#  Permanent freshwaters: EF(1).T(2).P(3) == 3 ____ ####
plot(M.Europa.J$CENTROID_Y~M.Europa.J$CENTROID_X,cex=0.1,col="light gray",pch=15, main="Permanent (4Km)")
points(M.Europa.J$CENTROID_Y[which(M.Europa.J$ISO3_CODE=="")]~M.Europa.J$CENTROID_X[which(M.Europa.J$ISO3_CODE=="")],cex=0.1,col="black",pch=15)
## UK
M.final.UK->AAA
ii <- cut(AAA$grado.out.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)], 
          breaks = seq(min(AAA$grado.out.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), 
                       max(AAA$grado.out.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), len = 600), include.lowest = TRUE)
points(AAA$CENTROID_Y[which(AAA$`EF(1).T(2).P(3)`==3)]~AAA$CENTROID_X[which(AAA$`EF(1).T(2).P(3)`==3)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AAA)

## SWE
M.final.SWE->AAA
ii <- cut(AAA$grado.out.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)], 
          breaks = seq(min(AAA$grado.out.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), 
                       max(AAA$grado.out.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), len = 600), include.lowest = TRUE)
points(AAA$CENTROID_Y[which(AAA$`EF(1).T(2).P(3)`==3)]~AAA$CENTROID_X[which(AAA$`EF(1).T(2).P(3)`==3)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AAA)

## ESP.PRT
M.final.ESP.PRT->AAA
ii <- cut(AAA$grado.out.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)], 
          breaks = seq(min(AAA$grado.out.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), 
                       max(AAA$grado.out.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), len = 600), include.lowest = TRUE)
points(AAA$CENTROID_Y[which(AAA$`EF(1).T(2).P(3)`==3)]~AAA$CENTROID_X[which(AAA$`EF(1).T(2).P(3)`==3)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AAA)

## FIN
M.final.FIN->AAA
ii <- cut(AAA$grado.out.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)], 
          breaks = seq(min(AAA$grado.out.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), 
                       max(AAA$grado.out.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), len = 600), include.lowest = TRUE)
points(AAA$CENTROID_Y[which(AAA$`EF(1).T(2).P(3)`==3)]~AAA$CENTROID_X[which(AAA$`EF(1).T(2).P(3)`==3)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AAA)
## FRA.LUX.BEL.NLD
M.final_FRA.LUX.BEL.NLD->AAA
ii <- cut(AAA$grado.out.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)], 
          breaks = seq(min(AAA$grado.out.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), 
                       max(AAA$grado.out.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), len = 600), include.lowest = TRUE)
points(AAA$CENTROID_Y[which(AAA$`EF(1).T(2).P(3)`==3)]~AAA$CENTROID_X[which(AAA$`EF(1).T(2).P(3)`==3)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AAA)
## NOR
M.final.NOR->AAA
ii <- cut(AAA$grado.out.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)], 
          breaks = seq(min(AAA$grado.out.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), 
                       max(AAA$grado.out.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), len = 600), include.lowest = TRUE)
points(AAA$CENTROID_Y[which(AAA$`EF(1).T(2).P(3)`==3)]~AAA$CENTROID_X[which(AAA$`EF(1).T(2).P(3)`==3)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AAA)

Betweenness

“STEPPING STONE (BC-4Km)”

Communities importance for connecting other communities (corridor effects) is captured by the graph centrality metric ‘betweenness’. This metric indicates the number of pairs of other communities that pass through this community in the shortest path that connects them.

par(mar=c(2.5,2.5,1.5,1.5),bty="l",cex=1.6)
par(mfrow=c(1,1),oma = c(0, 0, 4, 0))

#  Ephemeral freshwaters: EF(1).T(2).P(3) == 1 ____ ####
plot(M.Europa.J$CENTROID_Y~M.Europa.J$CENTROID_X,cex=0.1,col="light gray",pch=15, main="Ephemeral (4Km)")
points(M.Europa.J$CENTROID_Y[which(M.Europa.J$ISO3_CODE=="")]~M.Europa.J$CENTROID_X[which(M.Europa.J$ISO3_CODE=="")],cex=0.1,col="dark gray",pch=15)
mtext("Stepping stone patches \n (betweenness)", outer = TRUE, cex = 1.5,padj = 0,col="black")

## UK
M.final.UK->A
ii <- cut(A$bc.D50.4[which(A$`EF(1).T(2).P(3)`==1)], 
          breaks = seq(min(A$bc.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), 
                       max(A$bc.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), len = 600), include.lowest = TRUE)
points(A$CENTROID_Y[which(A$`EF(1).T(2).P(3)`==1)]~A$CENTROID_X[which(A$`EF(1).T(2).P(3)`==1)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,A)
###SWE
M.final.SWE->A
ii <- cut(A$bc.D50.4[which(A$`EF(1).T(2).P(3)`==1)], 
          breaks = seq(min(A$bc.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), 
                       max(A$bc.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), len = 600), include.lowest = TRUE)
points(A$CENTROID_Y[which(A$`EF(1).T(2).P(3)`==1)]~A$CENTROID_X[which(A$`EF(1).T(2).P(3)`==1)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,A)
###ESP.PRT
M.final.ESP.PRT->A
ii <- cut(A$bc.D50.4[which(A$`EF(1).T(2).P(3)`==1)], 
          breaks = seq(min(A$bc.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), 
                       max(A$bc.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), len = 600), include.lowest = TRUE)
points(A$CENTROID_Y[which(A$`EF(1).T(2).P(3)`==1)]~A$CENTROID_X[which(A$`EF(1).T(2).P(3)`==1)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,A)

###NOR
M.final.NOR->A
ii <- cut(A$bc.D50.4[which(A$`EF(1).T(2).P(3)`==1)], 
          breaks = seq(min(A$bc.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), 
                       max(A$bc.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), len = 600), include.lowest = TRUE)
points(A$CENTROID_Y[which(A$`EF(1).T(2).P(3)`==1)]~A$CENTROID_X[which(A$`EF(1).T(2).P(3)`==1)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,A)

###FRA.LUX.BEL.NLD
M.final_FRA.LUX.BEL.NLD->A
ii <- cut(A$bc.D50.4[which(A$`EF(1).T(2).P(3)`==1)], 
          breaks = seq(min(A$bc.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), 
                       max(A$bc.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), len = 600), include.lowest = TRUE)
points(A$CENTROID_Y[which(A$`EF(1).T(2).P(3)`==1)]~A$CENTROID_X[which(A$`EF(1).T(2).P(3)`==1)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,A)

###FIN
M.final.FIN->A
ii <- cut(A$bc.D50.4[which(A$`EF(1).T(2).P(3)`==1)], 
          breaks = seq(min(A$bc.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), 
                       max(A$bc.D50.4[which(A$`EF(1).T(2).P(3)`==1)]), len = 600), include.lowest = TRUE)
points(A$CENTROID_Y[which(A$`EF(1).T(2).P(3)`==1)]~A$CENTROID_X[which(A$`EF(1).T(2).P(3)`==1)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,A)

par(mar=c(2.5,2.5,1.5,1.5),bty="l",cex=1.6)
par(mfrow=c(1,1),oma = c(0, 0, 4, 0))

#  Temporal freshwaters: EF(1).T(2).P(3) == 2 ____ ####
plot(M.Europa.J$CENTROID_Y~M.Europa.J$CENTROID_X,cex=0.1,col="light gray",pch=15, main="Temporal (4Km)")
points(M.Europa.J$CENTROID_Y[which(M.Europa.J$ISO3_CODE=="")]~M.Europa.J$CENTROID_X[which(M.Europa.J$ISO3_CODE=="")],cex=0.1,col="black",pch=15)
## UK
M.final.UK->AA
ii <- cut(AA$bc.D50.4[which(AA$`EF(1).T(2).P(3)`==2)], 
          breaks = seq(min(AA$bc.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), 
                       max(AA$bc.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), len = 600), include.lowest = TRUE)
points(AA$CENTROID_Y[which(AA$`EF(1).T(2).P(3)`==2)]~AA$CENTROID_X[which(AA$`EF(1).T(2).P(3)`==2)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AA)
## SWE
M.final.SWE->AA
ii <- cut(AA$bc.D50.4[which(AA$`EF(1).T(2).P(3)`==2)], 
          breaks = seq(min(AA$bc.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), 
                       max(AA$bc.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), len = 600), include.lowest = TRUE)
points(AA$CENTROID_Y[which(AA$`EF(1).T(2).P(3)`==2)]~AA$CENTROID_X[which(AA$`EF(1).T(2).P(3)`==2)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AA)
## ESP.PRT
M.final.ESP.PRT->AA
ii <- cut(AA$bc.D50.4[which(AA$`EF(1).T(2).P(3)`==2)], 
          breaks = seq(min(AA$bc.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), 
                       max(AA$bc.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), len = 600), include.lowest = TRUE)
points(AA$CENTROID_Y[which(AA$`EF(1).T(2).P(3)`==2)]~AA$CENTROID_X[which(AA$`EF(1).T(2).P(3)`==2)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AA)
## NOR
M.final.NOR->AA
ii <- cut(AA$bc.D50.4[which(AA$`EF(1).T(2).P(3)`==2)], 
          breaks = seq(min(AA$bc.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), 
                       max(AA$bc.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), len = 600), include.lowest = TRUE)
points(AA$CENTROID_Y[which(AA$`EF(1).T(2).P(3)`==2)]~AA$CENTROID_X[which(AA$`EF(1).T(2).P(3)`==2)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AA)
## M.final_FRA.LUX.BEL.NLD
M.final_FRA.LUX.BEL.NLD->AA
ii <- cut(AA$bc.D50.4[which(AA$`EF(1).T(2).P(3)`==2)], 
          breaks = seq(min(AA$bc.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), 
                       max(AA$bc.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), len = 600), include.lowest = TRUE)
points(AA$CENTROID_Y[which(AA$`EF(1).T(2).P(3)`==2)]~AA$CENTROID_X[which(AA$`EF(1).T(2).P(3)`==2)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AA)
## FIN
M.final.FIN->AA
ii <- cut(AA$bc.D50.4[which(AA$`EF(1).T(2).P(3)`==2)], 
          breaks = seq(min(AA$bc.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), 
                       max(AA$bc.D50.4[which(AA$`EF(1).T(2).P(3)`==2)]), len = 600), include.lowest = TRUE)
points(AA$CENTROID_Y[which(AA$`EF(1).T(2).P(3)`==2)]~AA$CENTROID_X[which(AA$`EF(1).T(2).P(3)`==2)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AA)

par(mar=c(2.5,2.5,1.5,1.5),bty="l",cex=1.6)
par(mfrow=c(1,1),oma = c(0, 0, 4, 0))

#  Permanent freshwaters: EF(1).T(2).P(3) == 3 ____ ####
plot(M.Europa.J$CENTROID_Y~M.Europa.J$CENTROID_X,cex=0.1,col="light gray",pch=15, main="Permanent (4Km)")
points(M.Europa.J$CENTROID_Y[which(M.Europa.J$ISO3_CODE=="")]~M.Europa.J$CENTROID_X[which(M.Europa.J$ISO3_CODE=="")],cex=0.1,col="black",pch=15)
## UK
M.final.UK->AAA
ii <- cut(AAA$bc.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)], 
          breaks = seq(min(AAA$bc.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), 
                       max(AAA$bc.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), len = 600), include.lowest = TRUE)
points(AAA$CENTROID_Y[which(AAA$`EF(1).T(2).P(3)`==3)]~AAA$CENTROID_X[which(AAA$`EF(1).T(2).P(3)`==3)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AAA)

## SWE
M.final.SWE->AAA
ii <- cut(AAA$bc.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)], 
          breaks = seq(min(AAA$bc.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), 
                       max(AAA$bc.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), len = 600), include.lowest = TRUE)
points(AAA$CENTROID_Y[which(AAA$`EF(1).T(2).P(3)`==3)]~AAA$CENTROID_X[which(AAA$`EF(1).T(2).P(3)`==3)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AAA)

## ESP.PRT
M.final.ESP.PRT->AAA
ii <- cut(AAA$bc.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)], 
          breaks = seq(min(AAA$bc.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), 
                       max(AAA$bc.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), len = 600), include.lowest = TRUE)
points(AAA$CENTROID_Y[which(AAA$`EF(1).T(2).P(3)`==3)]~AAA$CENTROID_X[which(AAA$`EF(1).T(2).P(3)`==3)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AAA)

## FIN
M.final.FIN->AAA
ii <- cut(AAA$bc.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)], 
          breaks = seq(min(AAA$bc.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), 
                       max(AAA$bc.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), len = 600), include.lowest = TRUE)
points(AAA$CENTROID_Y[which(AAA$`EF(1).T(2).P(3)`==3)]~AAA$CENTROID_X[which(AAA$`EF(1).T(2).P(3)`==3)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AAA)

## NOR
M.final.NOR->AAA
ii <- cut(AAA$bc.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)], 
          breaks = seq(min(AAA$bc.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), 
                       max(AAA$bc.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), len = 600), include.lowest = TRUE)
points(AAA$CENTROID_Y[which(AAA$`EF(1).T(2).P(3)`==3)]~AAA$CENTROID_X[which(AAA$`EF(1).T(2).P(3)`==3)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AAA)
## FRA.LUX.BEL.NLD
M.final_FRA.LUX.BEL.NLD->AAA
ii <- cut(AAA$bc.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)], 
          breaks = seq(min(AAA$bc.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), 
                       max(AAA$bc.D50.4[which(AAA$`EF(1).T(2).P(3)`==3)]), len = 600), include.lowest = TRUE)
points(AAA$CENTROID_Y[which(AAA$`EF(1).T(2).P(3)`==3)]~AAA$CENTROID_X[which(AAA$`EF(1).T(2).P(3)`==3)],cex=0.4,
       col = colorRampPalette(c("yellow", "orange", "red"))(599)[ii],pch=15)
rm(ii,AAA)

Log-Ratio plots

Then, we estimated the log-ratio of each centrality metric (CentralityLR) between each pair of water habitat (i.e. permanent vs. temporary, permanent vs. ephemeral and temporary vs. ephemeral) as an index of the relative importance of the potential routes of dispersal between different habitats—e. g. BetweennessLR = log10(Betweennesstemporal/ Betweennesspermanent) (see Riibak et al., 2017 for a log-ratio-based analysis). To this aim, the centrality metrics were standardized between 0 and 1 within each freshwater ecoregion to make them directly comparable. Large positive or negative log-ratios indicate that one specific area could be more important in promoting freshwater connectivity for one type of freshwater habitat than for other. Log ratios close to zero indicate that both areas are similarly important for the connectivity of the two compared habitats. For the log-ratio estimations, only cells that had at least two types of water habitats were included.